<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

require dirname(__FILE__).'/infos.php';


# --- Désactiver les guillemets magiques ---
if (get_magic_quotes_gpc()) {
	function stripslashes_deep($value)
	{
		$value = is_array($value) ?
		array_map('stripslashes_deep', $value) :
		stripslashes($value);

		return $value;
	}

	$_POST = array_map('stripslashes_deep', $_POST);
	$_GET = array_map('stripslashes_deep', $_GET);
	$_COOKIE = array_map('stripslashes_deep', $_COOKIE);
	$_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}


# --- Gestion des erreurs ---
class cpErreur extends Exception {

	function __construct($message, $champ=null, $code=0)
	{
		parent::__construct($message);
		$this->champ = $champ;
		$this->code = $code;
	}
        
	public function __toString() {
		return sprintf('Erreur: %s (champ: %s, code: %c)', $this->getMessage(), $this->getChamp(), $this->getCode());
	}
        
	public function getChamp() {
		return $this->champ;
	}

}


function erreurFatale($titre,$message,$code=0)
{
	
	# Codes d'erreur
	# 10 : pas de fichier de configuration
	
	if (CLI_MODE)
	{
		trigger_error($titre,E_USER_ERROR);
		exit(1);
	}
	else
	{
		include dirname(__FILE__).'/admin/core_error.php';
	}
	exit;

}


# --- Constantes de Clicpage ---

# Opérateurs
define('CP_OPERATEUR_AND', 'AND');
define('CP_OPERATEUR_OR', 'OR');

# Types de données
define('CP_STRING', 1);
define('CP_INTEGER', 2);
define('CP_BOOL', 3);
define('CP_DATE', 4);

# Valeur retournée par les fonction get___()
define('CP_GET_COMPTEUR', 2);
define('CP_GET_RS', 3);
define('CP_GET_STATIC', 4);

# Version du site
define('CP_TEMPORAIRE', 1);
define('CP_PUBLIEE', 0);

# Statut (page ou site)
define('CP_STATUT_ONLINE', 1);
define('CP_STATUT_OFFLINE', 0);

# Commentaires
define('CP_COMMENTAIRES_ACTIFS', 1);
define('CP_COMMENTAIRES_DESACTIVES', 0);
define('CP_COMMENTAIRES_PERMISSION', 2);
define('CP_COMMENTAIRES_READONLY', 3);

define('CP_COMMENTAIRE_APPROUVE', 1);
define('CP_COMMENTAIRE_ATTENTE', 2);
define('CP_COMMENTAIRE_SPAM', 0);

# Pages
    
	# page_modifiee
	define('CP_PAGEMODIFIEE_OUI', 1);
	define('CP_PAGEMODIFIEE_NON', 0);
    
	# page_format
	define('CP_FORMAT_XHTML', 1);
	define('CP_FORMAT_WIKI', 2);
	define('CP_FORMAT_NA', 0); // n/a: ne s'applique pas

	
# Accès
define('CP_ACCES_TOUS', 0);
define('CP_ACCES_PERMISSION', 1);
define('CP_ACCES_MOT_DE_PASSE', 2);

define('CP_CONDITION_SEPARATEUR', 1);
define('CP_CONDITION_CHAMP', 2);
define('CP_CONDITION_OPERATEUR', 3);
define('CP_CONDITION_VALEUR', 4);

# Utilisateurs
define('CP_UTILISATEUR_ACTIF', 1);
define('CP_UTILISATEUR_TEMP', -1);
define('CP_UTILISATEUR_DESACTIVE', 0);

# Médias (miniatures)
define('CP_MINIATURE_ATTENTE', 0);
define('CP_MINIATURE_CREEE', 1);

# Administration

    # Affichage d'un module

	# Boutons d'action
	define('CP_BOUTON_ACTION_NOM', 1);
	define('CP_BOUTON_ACTION_LIEN', 2);
	define('CP_BOUTON_ACTION_ID', 3);
    
	# Dernière catégorie affichée (pages)
	define('CP_DERNIERE_CATEGORIE_AFFICHEE', 'derniereCatAffichee'); // nom de la variable de session utilisée pour se souvenir de la dernière catégorie affichée

	# Dernier dossier de médias affiché
	define('CP_DERNIER_DOSSIER_MEDIAS_AFFICHE', 'derniereDossierMediasAffiche'); // nom de la variable de session utilisée pour se souvenir du dernier dossier affiché
    

# --- Inclusion du fichier de configuration ---

if(!file_exists(dirname(__FILE__).'/../config/config.inc.php')) {
	$path = strpos($_SERVER['PHP_SELF'],'/admin') !== false ? '' : 'admin/';
	erreurFatale('Impossible de trouver le fichier de configuration.',
		'Vous pouvez le créer en utilisant <a href="'.$path.'install">l\'assistant d\'installation</a>.</p>',
		10);
	exit;
}

require(dirname(__FILE__).'/../config/config.inc.php');


# --- Autoload ---

require CLEARBRICKS_PATH.'/_common.php';
require CP_RACINE.'/inc/cpClearbricks/_common.php';

$__autoload['cpCore'] = CP_RACINE.'/inc/class.cp.core.php';
$__autoload['cpAuth'] = CP_RACINE.'/inc/class.cp.auth.php';
$__autoload['cpSite'] = CP_RACINE.'/inc/class.cp.site.php';

$__autoload['cpMessages'] = CP_RACINE.'/inc/class.cp.messages.php';
$__autoload['cpFeed'] = CP_RACINE.'/inc/feed/class.cp.feed.php';

$__autoload['cpAdmin'] = CP_RACINE.'/inc/admin/class.cp.admin.php';
$__autoload['cpModuleAdmin'] = CP_RACINE.'/inc/admin/class.cp.moduleAdmin.php';

$__autoload['cpListe'] = CP_RACINE.'/inc/admin/class.cp.liste.php';
$__autoload['cpListePages'] = CP_RACINE.'/inc/admin/class.cp.listePages.php';
$__autoload['cpListeMedias'] = CP_RACINE.'/inc/admin/class.cp.listeMedias.php';
$__autoload['cpListeCommentaires'] = CP_RACINE.'/inc/admin/class.cp.listeCommentaires.php';
$__autoload['cpListeUtilisateurs'] = CP_RACINE.'/inc/admin/class.cp.listeUtilisateurs.php';
$__autoload['cpListeGroupesUtilisateurs'] = CP_RACINE.'/inc/admin/class.cp.listeGroupesUtilisateurs.php';

$__autoload['cpServiceAccueil'] = CP_CHEMIN_ADMIN.'/services/accueil.service.php';
$__autoload['cpServiceCommentaires'] = CP_CHEMIN_ADMIN.'/services/commentaires.service.php';
$__autoload['cpServiceGadgets'] = CP_CHEMIN_ADMIN.'/services/gadgets.service.php';
$__autoload['cpServiceGroupesUtilisateurs'] = CP_CHEMIN_ADMIN.'/services/groupesUtilisateurs.service.php';
$__autoload['cpServiceMedias'] = CP_CHEMIN_ADMIN.'/services/medias.service.php';
$__autoload['cpServicePages'] = CP_CHEMIN_ADMIN.'/services/pages.service.php';
$__autoload['cpServiceUtilisateurs'] = CP_CHEMIN_ADMIN.'/services/utilisateurs.service.php';

$__autoload['cpPage'] = CP_RACINE.'/inc/class.cp.page.php';
$__autoload['cpCommentaire'] = CP_RACINE.'/inc/class.cp.commentaire.php';
$__autoload['cpCategorie'] = CP_RACINE.'/inc/class.cp.categorie.php';
$__autoload['cpMedia'] = CP_RACINE.'/inc/class.cp.media.php';
$__autoload['cpMenu'] = CP_RACINE.'/inc/class.cp.menu.php';
$__autoload['cpUtilisateur'] = CP_RACINE.'/inc/class.cp.utilisateur.php';
$__autoload['cpGroupeUtilisateurs'] = CP_RACINE.'/inc/class.cp.groupeUtilisateurs.php';

$__autoload['cpGenerateur'] = CP_RACINE.'/inc/generateurs/class.cp.generateur.php';
$__autoload['cpAntispam'] = CP_RACINE.'/inc/antispam/class.cp.antispam.php';
$__autoload['cpGadget'] = CP_RACINE.'/inc/gadgets/class.cp.gadget.php';

$__autoload['cpGadgetsContenu'] = CP_RACINE.'/inc/generateurs/class.cp.gadgetsContenu.php';

$__autoload['cpTheme'] = CP_RACINE.'/inc/themes/class.cp.theme.php';
$__autoload['cpBalisesTemplate'] = CP_RACINE.'/inc/themes/class.cp.balisesTemplate.php';
$__autoload['cpContexte'] = CP_RACINE.'/inc/themes/class.cp.contexte.php';

$__autoload['cpPublic'] = CP_RACINE.'/inc/public/class.cp.public.php';
$__autoload['cp401'] = CP_RACINE.'/inc/generateurs/class.cp.401.php';
$__autoload['cp404'] = CP_RACINE.'/inc/generateurs/class.cp.404.php';

$__autoload['cpUpdate'] = CP_RACINE.'/inc/class.cp.update.php';


# --- Encodage UTF-8 ---
mb_internal_encoding('UTF-8');


# --- Initialisation du système de localisation ---
l10n::init();


# --- Taille maximale d'upload ---
$u_max_size = files::str2bytes(ini_get('upload_max_filesize'));
$p_max_size = files::str2bytes(ini_get('post_max_size'));
if ($p_max_size < $u_max_size) {
	$u_max_size = $p_max_size;
}
define('CP_MAX_UPLOAD_SIZE',$u_max_size);
unset($u_max_size); unset($p_max_size);


# --- Initialisation de cpCore ---
try {
	$core = new cpCore(CP_DBDRIVER,CP_DBHOST,CP_DBNAME,CP_DBUSER,CP_DBPASSWORD,CP_DBPREFIX,CP_DBPERSIST);
}
catch (Exception $e) {
	erreurFatale('Erreur au démarrage de Clicpage', $e->getMessage());
}

# --- Fuseau horaire ---
dt::setTZ($core->site->getPropriete('site_tz'));


# --- Composants par défaut ---

$core->initialiserGenerateur(
	/* Identifiant */	'contenu',
	/* Nom */			__('Page de contenu'),
	/* Description */	__('À remplir avec du texte, des images et des vidéos'),
	/* Dossier */		dirname(__FILE__).'/generateurs/contenu'
);

$core->initialiserGenerateur(
	/* Identifiant */	'connexion',
	/* Nom */			__('Connexion'),
	/* Description */	__('Permet aux visiteurs de s\'identifier sur votre site.'),
	/* Dossier */		dirname(__FILE__).'/generateurs/connexion'
);

$core->initialiserGenerateur(
	/* Identifiant */	'recherche',
	/* Nom */			__('Recherche'),
	/* Description */	__('Recherche sur les pages de votre site'),
	/* Dossier */		dirname(__FILE__).'/generateurs/recherche'
);

$core->initialiserGenerateur(
	/* Identifiant */	'liens',
	/* Nom */			__('Liens'),
	/* Description */	__('Liste de liens selon des conditions'),
	/* Dossier */		dirname(__FILE__).'/generateurs/liens'
);

$core->initialiserGenerateur(
	/* Identifiant */	'tags',
	/* Nom */			__('Tags'),
	/* Description */	__('Nuage de tags'),
	/* Dossier */		dirname(__FILE__).'/generateurs/tags'
);

$core->initialiserGadget(
	/* Identifiant */	'texte',
	/* Nom */			__('Texte'),
	/* Description */	__('Texte ou code HTML arbitraire'),
	dirname(__FILE__).'/gadgets/texte'
);

$core->initialiserGadget(
	/* Identifiant */	'menu',
	/* Nom */			__('Menu'),
	/* Description */	__('Liste de liens internes ou externes'),
	/* Dossier */		dirname(__FILE__).'/gadgets/menu'
);

$core->initialiserGadget(
	/* Identifiant */	'recherche',
	/* Nom */			__('Recherche'),
	/* Description */	__('Recherche sur les pages de votre site'),
	/* Dossier */		dirname(__FILE__).'/gadgets/recherche'
);

$core->initialiserGadget(
	/* Identifiant */	'tags',
	/* Nom */			__('Tags'),
	/* Description */	__('Nuage de tags'),
	/* Dossier */		dirname(__FILE__).'/gadgets/tags'
);

$core->initialiserAntispam(
	/* Identifiant */	'motsInterdits',
	/* Nom */			__('Mots interdits'),
	/* Description */	__('Bloque les commentaires qui contiennent certains mots.'),
	/* Dossier */		dirname(__FILE__).'/antispam/motsInterdits'
);

$core->initialiserAntispam(
	/* Identifiant */	'IPInterdits',
	/* Nom */			__('Liste noire d\'adresses IP'),
	/* Description */	__('Bloque les commentaires en provenance de certaines adresses IP.'),
	/* Dossier */		dirname(__FILE__).'/antispam/IPInterdits'
);

$core->initialiserAntispam(
	/* Identifiant */	'IPLookup',
	/* Nom */			__('Vérification d\'adresse IP'),
	/* Description */	__('Vérifie l\'adresse IP de l\'auteur sur des serveurs DNSBL.'),
	/* Dossier */		dirname(__FILE__).'/antispam/IPLookup'
);

$core->initialiserAntispam(
	/* Identifiant */	'LinksLookup',
	/* Nom */			__('Vérification des liens'),
	/* Description */	__('Vérifie les liens dans le commentaires sur surbl.org'),
	/* Dossier */		dirname(__FILE__).'/antispam/LinksLookup'
);

# --- Shutdown ---
register_shutdown_function('__shutdown');

function __shutdown()
{
	global $__shutdown;

	if (is_array($__shutdown)) {
		foreach ($__shutdown as $f) {
			if (is_callable($f)) {
				call_user_func($f);
			}
		}
	}
	
	# Explicitly close session before DB connection
	if (session_id()) {
		session_write_close();
	}
	$GLOBALS['core']->con->close();
}

?>